package com.foreknow.controller;


import com.foreknow.model.Admin;
import com.foreknow.service.impl.AdminServiceImpl;


import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;


/**
 * Servlet：服务器端的应用程序（使用Java编写）
 * 作用：处理客户端请求（例如：用户所填写的数据）
 * <p>
 * 1. 想要创建Servlet一定要继承HttpServlet
 * 2. 需要去重写doGet/doPost方法
 * 3. 什么时候调用这两个方法：当客户端向服务器端发送的请求get，就会调用servlet中的doGet方法
 * 当客户端向服务器发送的请求post，就会调用servlet中的doPost方法
 * 4. 方法的参数
 * 4.1 HttpServletRequest接口：这个接口无需我们自己初始化，他会服务器自动进行初始化.接口会提供一些常用的方法来处理一些请求的参数
 * 获取application context的路径" req.getContextPath()
 * 获取到请求的参数" req.getParameter("username")
 * 4.2 HttpServletResponse接口：......来处理一些结果
 * <p>
 * 关于Servlet中的资源跳转
 * 1.请求转发：
 * 相当于客户端向服务器端发送一次请求
 * url地址是第一次发送请求的地址    http://。。。。/find
 * 请求转发之恶能转发站内的资源，不能转发站外的资源
 * 2.重定向：相当于客户端向服务端发送两次请求
 * 相当于客户端向服务器端发送两次请求
 * url的地址是最终目标资源的地址    http://.../get
 * 重定向可以定向任意资源（站内、站外）
 */
public class LoginServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);

//        out.println("<html>");
//        out.println("<head>");
//        out.println("<title>Login Servlet</title>");
//        out.println("</head>");
//        out.println("<body>");
//        out.println("获取请求方法"+req.getMethod()+"<br>");
//        out.println("获取application context的路径"+req.getContextPath()+"<br>");
//        out.println("获取到请求的uri地址"+req.getRequestURI()+"<br>");
//        out.println("获取到请求的参数"+req.getParameter("username")+"<br>");
//        out.println(new Date());
//        out.println("</body>");
//        out.println("</html>");
    }

    @Override
    public void init(ServletConfig config) throws ServletException {
//        获取初始化参数（局部）
//        String pageSize = config.getInitParameter("pageSize");
        //获取全局的初始化参数<context-param>
        String pageSize = config.getServletContext().getInitParameter("pageSize");
        System.out.println(pageSize);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //服务器端向客户端相应的内容的类型（MIME）      https://www.w3school.com.cn/media/media_mimeref.asp
        //resp.setContentType("text/html;charset=utf-8");
        //设置客户端向服务器端发送请求的字符编码集
        //req.setCharacterEncoding("utf-8");
        PrintWriter out = resp.getWriter();
        //如何获取session
        HttpSession session = req.getSession();
        //获取前端表单请求参数
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        AdminServiceImpl adminService = new AdminServiceImpl();
        Admin admin = adminService.getAdminByNameByPass(username, password);
        if (admin != null) {
            out.println("登录成功");
            //将用户保存到session中
            session.setAttribute("username", admin.getAdminName());
            //显示所有留言信息（转发）
            req.getRequestDispatcher("/user/manager?q=list").forward(req, resp);
        } else {
            out.println("登录失败");
        }
    }
}
